package com.junmeng.jdemo.recycler.chat.contextmenu.base;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

public interface IContextMenuManager<MenuInfo, TypeKey, UserData> {
    /**
     * 菜单监听器
     * @param clickListener
     * @return
     */
    IContextMenuManager setMenuListener(@Nullable MenuListener<MenuInfo, UserData> clickListener);

    /**
     * 菜单视图管理器，用于展示菜单视图
     * @param menuViewManager
     * @return
     */
    IContextMenuManager setMenuViewManager(@NonNull IMenuViewManager<MenuInfo, UserData> menuViewManager);

    /**
     * 类型管理器，每种类型对应有0个或多个菜单
     * @param typeManager
     * @return
     */
    IContextMenuManager setTypeManager(@NonNull ITypeManager<TypeKey> typeManager);

    /**
     * 显示菜单
     * @param type
     * @param userData 用户自定义数据，此数据会在监听器{@link MenuListener#onMenuClick}中原样返回
     */
    void show(@NonNull TypeKey type, @Nullable UserData userData);

    void hide();
}
